/**
 * @author: Gene
 * @age: 永远18岁的美少年
 * @Email： yangjianyun@58.com
 * @date: 2021-12-23 14:00:03
 * @description: ts 中的条件类型
 */

/** 1. 条件类型用来表达非均匀类型映射，可以根据一个条件表达式来进行类型检测，从两个类型中选出其中一个：*/
//  T extends U ? X : Y
// 语义类似三目运算符：若 T 是 U 的子类型，则类型为 X，否则类型为 Y。若无法确定 T 是否为 U 的子类型，则类型为 X | Y。

/** 2. 示例 */
declare function f<T extends boolean>(x: T): T extends true ? string : number

// 在Math.random() < 0.5 这个条件不确定的情况下，得到了联合类型 string | number。
const x = f(Math.random() < 0.5) // const x: string | number

const y = f(true) // const y: string
const z = f(false) // const z: number